class RandomizedSet {
    vector<int> _table;
    unordered_map<int,int> _map; // _table数值和下标的关系

public:
    RandomizedSet() {
        srand((unsigned)time(nullptr));
    }
    
    bool insert(int val) {
        if(_map.count(val)) return false;
        int index = _table.size();
        _table.emplace_back(val);
        _map[val] = index;
        return true;
    }
    
    bool remove(int val) {
        if(!_map.count(val)) return false;

        int index = _map[val];
        int back = _table.back();
        _table[index] = back;
        _map[back] = index;
        _table.pop_back();
        _map.erase(val);
        return true;
    }
    
    int getRandom() {
        int randomIndex = rand() % _table.size();
        return _table[randomIndex];
    }
};
